package com.sishu.service.impl;

import com.sishu.mapper.GameMapper;
import com.sishu.mapper.GamegroupsMapper;
import com.sishu.pojo.Game;
import com.sishu.pojo.Gamegroups;
import com.sishu.service.GameService;
import com.sishu.utils.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

@SuppressWarnings("rawtypes")
@Service
@Slf4j
public class GameServiceimpl implements GameService {


    @Resource
    private GameMapper gameMapper;

    @Resource
    private GamegroupsMapper gamegroupsMapper;


    /**
     * @author linyi
     * @date 2025-01-03 14:19:55
     * @description 获取一个最大的gameId
     */

    private String generateGameId() {
        // 获取当前最大 id
        Integer maxId = gameMapper.selectMaxgameId();
        if (maxId == null) {
            maxId = 0;
        }
        // 生成新的 classId
        int nextId = maxId + 1;
        return String.format("g%03d", nextId);
    }

    public List<String> generateGroupIds() {
        //随机获得6个uuid当作groupId
        List<String> groupIds = new ArrayList<>();
        for (int i = 0; i < 6; i++) {
            String uuid = UUID.randomUUID().toString();
            groupIds.add(uuid);
        }
        return groupIds;
    }

    //    @Override
//    public Result startgame(Game game) {//传过来的这个game对象是用来设置难易度的
//        log.info("game = " + game);
//        List<Game> inittime = gameMapper.inittime(LocalDateTime.now());
//        log.info("inittime" + inittime);
//
//        if (inittime != null && !inittime.isEmpty()){ //如果不为空的话,证明游戏已经开始了
//            return new Result<>(202,"游戏已经开始",false);
//
//        }
//        String gameId = generateGameId();  //生成gameId
//
//        //1.创建game对象,设置到数据库中
//        game.setGameId(gameId);
//        game.setActive(1);  //设置是否被使用 1代表以及被使用
//        game.setCreateTime(LocalDateTime.now());//设置game的激活状态
//        game.setEndTime(LocalDateTime.now().plusMinutes(10));//设置game的激活状态
//        gameMapper.insert(game);  //新增game对象
//
//
//        //2. 创建6个游戏小组对象,设置到数据库中
//        List<String> groupIds = generateGroupIds();  //随机生产6个uuid当作groupId
//        for (String groupId : groupIds) {
//            Gamegroups gamegroups = new Gamegroups();
//            gamegroups.setGameId(gameId);  //设置对应的gameId
//            gamegroups.setGroupId(groupId);  //设置对应的groupId
//            gamegroups.setActive(0);//设置是否使用
//            gamegroupsMapper.insert(gamegroups);
//        }
//
//        return new Result<>(202,"data","开始游戏",game,true);
//    }
    @Override
    public Result startgame(Game game) {
        log.info("game = " + game);
        List<Game> inittime = gameMapper.inittime(LocalDateTime.now());  //必须在创建时间之内,并且 激活状态为1的game
        log.info("inittime" + inittime);

        if (inittime != null && !inittime.isEmpty()) {  //如果有创建的game
            for (Game existingGame : inittime) {
                if (existingGame.getActive() == 1 && existingGame.getEndTime().isAfter(LocalDateTime.now())) {
                    //如果游戏已经开始并且没有结束
                    return new Result<>(202, "游戏已经开始", false);
                }
            }
        }
        List<Game> allgame = gameMapper.allgame();
        for (Game existingGame : allgame) {
            if (existingGame.getActive() == 1) {
                return new Result<>(200, "data", "游戏已经开始,请先结束上把游戏", existingGame.getGameId(), false);
            }
        }

        String gameId = generateGameId();  //生成gameId

        //1.创建game对象,设置到数据库中
        game.setGameId(gameId);
        game.setActive(1);  //设置是否被使用 1代表已经使用
        game.setCreateTime(LocalDateTime.now()); //设置game的创建时间
        game.setEndTime(LocalDateTime.now().plusMinutes(10)); //设置game的结束时间
        gameMapper.insert(game);  //新增game对象

        //2. 创建6个游戏小组对象,设置到数据库中
        List<String> groupIds = generateGroupIds();  //随机生成6个uuid当作groupId
        for (String groupId : groupIds) {
            Gamegroups gamegroups = new Gamegroups();
            gamegroups.setGameId(gameId);  //设置对应的gameId
            gamegroups.setGroupId(groupId);  //设置对应的groupId
            gamegroups.setActive(0); //设置是否使用
            gamegroupsMapper.insert(gamegroups);
        }

        return new Result<>(202, "data", "开始游戏", game, true);
    }


    @Override
    public Result gameover() {

        gameMapper.setactivezero();
        return new Result<>(202, "游戏结束", true);
    }

    @Override
    public Result seedifficulty() {
        Game game = gameMapper.seedifficulty();
        log.info("game = " + game);
        return new Result<>(200, "data", "查询成功", game, true);
    }
}
